package Main;
import Elementos.ListaMensajes;
import Elementos.TablaTercetos;
import Generador.Generator;
import Lexico.AnalizadorLexico;
import Lexico.PalabrasReservadas;
import Lexico.TablaSimbolos;
import Sintactico.Parser;


public class MyCompilator {
	private String rutaArchivo;
	private PalabrasReservadas pReservadas;
	private TablaSimbolos tSimbolos;
	private ListaMensajes mensajes;
	private AnalizadorLexico aLexico;
	private Parser aSintactico;
	private TablaTercetos tTercetos;
	private Generator gCodigo;
	
	public MyCompilator(String ruta){
		this.rutaArchivo=ruta;
		this.pReservadas= new PalabrasReservadas();
		this.tSimbolos= new TablaSimbolos();
		this.mensajes= new ListaMensajes();
		this.aLexico= new AnalizadorLexico(pReservadas, tSimbolos, mensajes, rutaArchivo);	
		this.tTercetos= new TablaTercetos();
		this.aSintactico= new Parser(this.aLexico, this.mensajes, this.tTercetos);                         //??parametros??	
		this.gCodigo= new Generator(this.rutaArchivo, this.tSimbolos, this.tTercetos, this.mensajes);
	}
	
	public void ejecutar(){
		this.aSintactico.run();
		this.gCodigo.GenerarCodigo();
	}
	
	public String verLexico(){         //Muestra los tokes reconocidos por el lexico
		String total= "Tokens reconocidos por el analizador Lexico: " + '\n' ;
		total= total + this.aSintactico.getLogTokens().toString();
		return total;
	}
	
	public String verTablaSimbolos(){                     //muestra la tabla de simbolos cargada por el lexico
		String total="Contenido en Tabla de Simbolos: "+'\n';
		total= total + this.aLexico.getTablaSimbolos().toString();				
		return total;		
	}	
	
	public String verPalabrasReservadas(){									//muestra las palabras reservadas		
		String total="Palabras Reservadas: "+ '\n' ;
		total= total + this.aLexico.getPalabrasReservadas().toString();			
		return total;	
	}
	public String verSintactico(){
		String total= "Sentencias reconocidas por el Analizador Sintactico: "+'\n';
		total= total + this.aSintactico.getLog().toString();			
		return total;	
	}
	public String verGeneral(){
		String total= "Resultado General: "+'\n';
		total= total + mensajes.toString();					
		return total;	
	}
	public String verTercetos(){
		String total= "Tercetos: "+'\n';
		total= total + tTercetos.toString();					
		return total;	
	}
	public String verCodigoIntermedio(){
		String total= "Codigo Intermedio: "+'\n';
		total= total + gCodigo.getCodigo()+'\n';					
		return total;	
	}
	public static void main(String[] args) {
		
	
	}
}
